/**
 * @file rising_dege.h
 * @author your name (you@domain.com)
 * @brief
 * @version 0.1
 * @date 2025-04-09
 *
 * @copyright Copyright (c) 2025
 *
 */
#ifndef RISING_DEGE_H
#define RISING_DEGE_H
#include <stddef.h>
#include <stdint.h>
/**
 * @brief 定义每个监控变量的状态结构体
 *
 */
typedef struct {
    uint8_t* variable;       /*指向被监控的变量*/
    uint8_t  last_state;     /*上一次的状态*/
    uint8_t  rising_trigger; /*上升沿触发标志 (1 表示触发, 0 表示未触发)*/
} RisingEdgeMonitor;

/**
 * @brief 定义上升沿检测器结构体
 *
 */
typedef struct {
    RisingEdgeMonitor* monitors; /*监控数组*/
    size_t             count;    /*当前监控数量*/
    size_t             capacity; /*数组容量*/
} RisingEdgeDetector;
/**
 * @brief 初始化上升沿检测器
 *
 * @param detector 上升沿检测器实例
 * @param buffer 监控变量数组
 * @param capacity 数组容量
 */
void init_rising_detector(RisingEdgeDetector* detector, RisingEdgeMonitor* buffer, size_t capacity);
/**
 * @brief 绑定变量到上升沿检测器
 *
 * @param detector 上升沿检测器实例
 * @param variable 指向要监控的变量的指针
 * @return int 绑定结果 (0 表示成功, -1 表示失败)
 */
int bind_rising_variable(RisingEdgeDetector* detector, uint8_t* variable);
/**
 * @brief 检测上升沿
 *
 * @param detector 上升沿检测器实例
 */
void detect_rising_edges(RisingEdgeDetector* detector);
/**
 * @brief 新增函数：根据变量地址查询上升沿是否触发
 *
 * @param detector 上升沿检测器实例
 * @param variable bind_variable函数绑定的变量地址
 * @return uint8_t 0表示未触发，1表示触发
 */
uint8_t is_rising_edge_triggered(RisingEdgeDetector* detector, uint8_t* variable);
#endif
